草庐IT

javascript var 与这个

全部标签

c++ - 使用 lambda 作为模板参数时,这个编译器错误是什么?

编辑:这已被报告为MicrosoftConnect上的VS2012C++编译器错误(link).十一月2014年1月11日:Microsoft已回应称,此错误的修复应该出现在VisualC++的下一个主要版本中。我一直在为一条我不理解的VS2012编译器错误消息而苦苦挣扎,所以我将问题缩减到最低限度。我正在使用VS2012构建以下main.cpp:#includetemplatestructA{Tx;A(A&&other):x(std::move(other.x)){}A(T&&x):x(std::move(x)){}};templateAbuild(T&&x){returnA(std

c++ - 为什么 g++(4.6 和 4.7)将这个除法的结果提升为 double ?我能阻止吗?

我正在编写一些模板代码来对同时使用float和double的数值算法进行基准测试,以便与GPU实现进行比较。我发现我的浮点代码速度较慢,在调查使用Intel的VtuneAmplifier后,我发现g++正在生成额外的x86指令(cvtps2pd/cvtpd2ps和unpcklps/unpcklpd)以将一些中间结果从float转换为double然后再返回再次。此应用程序的性能下降了近10%。在使用标志-Wdouble-promotion编译后(顺便说一句,-Wall或-Wextra不包含),果然g++警告我结果正在提升。我将其简化为如下所示的简单测试用例。请注意,C++代码的顺序会影响

c++ - 这个 C++ 模式的名称及其背后的原因是什么?

在我公司的C++代码库中,我看到很多这样定义的类://FooApi.hclassFooApi{public:virtualvoidsomeFunction()=0;virtualvoidsomeOtherFunction()=0;//etc.};//Foo.hclassFoo:publicFooApi{public:virtualvoidsomeFunction();virtualvoidsomeOtherFunction();};Foo是唯一继承自FooApi的类,接受或返回指向Foo对象的指针的函数使用FooApi*代替。它似乎主要用于单例类。这是编写C++代码的常见命名方式吗?这

c++ - 为什么字符串连接宏不适用于这个 "+"案例?

小问题:是否允许为字符串连接宏##连接特殊符号,例如+、-?例如,#defineOP(var)operator##varOP(+)会扩展为operator+吗?具体问题:#include"z3++.h"#includenamespacez3{z3::exproperator+(z3::exprconst&,z3::exprconst&);}typedefz3::expr(*MyOperatorTy)(z3::exprconst&,z3::exprconst&);#defineSTR(var)#var#definez3Op(var)static_cast(&z3::operator##v

c++ - 哪个命名空间包含这个友元函数的声明?

下面的friend函数不是通过普通查找(§7.3.1.2/3)找到的,而是通过ADL找到的(§3.4.2/4第二个要点),因此代码编译通过并正常执行(liveexample)。但是函数f没有在任何命名空间中声明。例如,如果您尝试将调用f(x);替换为这些调用中的任何一个::f(x);,A::f(x);或A::X::f(x);,代码将无法编译。哪个命名空间包含这个友元函数的声明?标准对此有何规定?#includenamespaceA{classX{inti;friendvoidf(Xx){std::cout 最佳答案 来自C++标准1

c++ - 这个函数重载是否正确?

考虑在一个C++程序中包含这四个函数:voida(intval){cout我有几个问题:代码会不会有什么错误?还是它们都重载而没有任何错误。你能告诉我如何正确调用所有这四个函数吗?我的尝试如下:intiTmp;int*pTmp;doubledTmp;a(iTmp);a(iTmp);a(pTmp);a(dTmp); 最佳答案 唯一的问题是函数:voida(int&val)和voida(intval)编译器会产生以下错误:Compilationerrortime:0memory:3140signal:0prog.cpp:Infuncti

C++ 这个很少使用的构造函数语法是什么?

编辑:我认为这不是thisotherquestion的拷贝,因为另一个问题只是在构造函数中将()转换为{}。而我注意到当构造函数在struct中定义时的不同行为,而不是在class中。(而且,正如评论中所指出的,这是关于使用构造函数而不是编写它们。)但我以前错了。我在辅导时遇到了构造函数的这种奇怪的(对我来说)语法:Fooobj{i,j};起初我认为它行不通,并告诉学生重写它——但他们坚持认为它行得通,并告诉我他们从cplusplus.com上提取了示例,towhichI'venotbeenabletofindareference,所以我还是尝试了一下......它奏效了。所以我试验了

c++ - 为什么这个程序不包括 100?

我正在编写这个程序,它会猜测用户正在考虑的数字。经过几天的工作,我无法弄清楚其中有什么问题。此外,我为作业提出的评分也不是我的预期。请帮忙。用户可以猜100,但我的程序使用中点规则,所以最多只能猜到99。我怎样才能使100包含在内?如果我一直按“l”,程序最终会跳出循环并打印如果你想再试一次?有没有更好的方法来编写这个程序?请举个例子。这是实际的程序:编写一个程序,可以计算出人类用户选择的数字。人类用户会想到1到100之间的一个数字。程序会进行猜测,用户会告诉程序猜测更高或更低。程序应找到两个数字的中点并询问该数字是更高还是更低。#includeusingnamespacestd;in

有人可以向我解释这个功能吗

我写了这个功能,但是...deflook_up(to_search,target):for(index,item)inenumerate(to_search):ifitem==target:breakelse:return(-1)return(index)当我传递该列表上的名称时,它会返回该名称的索引,但是当我以错误的名称传递时,它返回-1,并且不会返回“返回(index)”,即使是“返回(index)”语句不在for循环中,为什么?而且我也不能在“else”语句中添加其他任何内容,我尝试向其他内容添加“打印”语句,但不会打印它。names=['neno','jay','james,'alex

c++ - 为什么在这个 'handmade list' 中使用指向指针的指针?

我们在学校有一个项目,尽管该项目是关于什么的,但它涉及使用具有这种特定结构的链表:typedefstruct_node{intcontents;_node*next_node;}*node;在项目之前,我们被分配了一堆函数来学习使用列表(将节点推到列表的前面或后面,计算节点数量,搜索特定节点等)。其实并没有那么难,但是当老师发来基础工程的时候(这样我们每个人都从同一个地方开始),所有的函数都涉及传递一个*node引用。例如:resultTypefunctionName(node*list,...){...}我在项目之前用void函数完成了所有列表函数,因为,至少据我所知,我们正在使用指